﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.Security;
using System.Configuration;
using System.Net.Mail;
using System.Text;
using System.Web.Configuration;
using System.Net.Configuration;
using ankietyzacja.Logic;
using ankietyzacja.Dao;
using System.Data.SqlClient;




namespace ankietyzacja
{
    public partial class PersonaDataChange : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            String uzytkownikId = Request.QueryString["uzytkownik_id"];

            if (uzytkownikId != null && !(Roles.IsUserInRole("Administratorzy") || Roles.IsUserInRole("Obslugujacy")))
            {
                throw (new AccessViolationException("Brak uprawnień do wyświetlenia strony"));
            }

            if (uzytkownikId == null)
            {
                MembershipUser user = Membership.GetUser();
                uzytkownikId = user.ProviderUserKey.ToString();


//                UzytkownikDetailsView.Fields[5].Visible = false;

                AddUserButton.Visible = false;
            }
            else
            {
                ChangeUserPassword.Visible = false;
                LastLoginDetailsView.Visible = false;
                AddUserButton.Visible = true;
            }

            String newUser = Request.QueryString["new"];

            if (newUser == "1")
            {
                if (!(Roles.IsUserInRole("Administratorzy") || Roles.IsUserInRole("Obslugujacy")))
                {
                    throw (new AccessViolationException("Brak uprawnień do dodawania użytkowników"));
                }


                UzytkownikDetailsView.ChangeMode(DetailsViewMode.Insert);
                MembershipDetailsView.ChangeMode(DetailsViewMode.Insert);
                ChangeUserPassword.Visible = false;
                LastLoginDetailsView.Visible = false;
            }



            UzytkownikSqlDataSource.SelectParameters["UZYTKOWNIK_ID"].DefaultValue = uzytkownikId;
            UzytkownikSqlDataSource.UpdateParameters["UZYTKOWNIK_ID"].DefaultValue = uzytkownikId;

            UserSqlDataSource.SelectParameters["UserId"].DefaultValue = uzytkownikId;
            UserSqlDataSource.UpdateParameters["UserId"].DefaultValue = uzytkownikId;





        }


        protected void UzytkownikDetailsView_ModeChanging(object sender, DetailsViewModeEventArgs e)
        {
            MembershipDetailsView.ChangeMode(e.NewMode);
        }

        protected void UzytkownikDetailsView_ItemUpdated(object sender, DetailsViewUpdatedEventArgs e)
        {
            MembershipDetailsView.UpdateItem(true);
        }

        protected void ChangeUserPassword_ChangePasswordError(object sender, EventArgs e)
        {

            CustomValidator val = new CustomValidator();
            val.IsValid = false;
            val.ErrorMessage = ChangeUserPassword.ChangePasswordFailureText;
            val.ValidationGroup = "PersonalDataValidationGroup";
            this.Page.Validators.Add(val);

        }

        protected void UzytkownikDetailsView_DataBound(object sender, EventArgs e)
        {
            if (UzytkownikDetailsView.CurrentMode == DetailsViewMode.Insert)
            {
                CheckBox KontoCzynneCheckBox = (CheckBox)UzytkownikDetailsView.FindControl("KontoCzynneCheckBox");
                if (KontoCzynneCheckBox != null)
                {
                    KontoCzynneCheckBox.Checked = true;
                }
                CheckBox AnkietyzowalnyCheckBox = (CheckBox)UzytkownikDetailsView.FindControl("AnkietyzowalnyCheckBox");
                if (AnkietyzowalnyCheckBox != null)
                {
                    AnkietyzowalnyCheckBox.Checked = true;
                }

            }
        }

        protected void UzytkownikDetailsView_ItemCommand(object sender, DetailsViewCommandEventArgs e)
        {

            if (e.CommandName == "Return")
            {
                Server.Transfer("Users.aspx");
            }



        }

        protected void UzytkownikDetailsView_ItemInserting(object sender, DetailsViewInsertEventArgs e)
        {
            TextBox UserNameTextBox = (TextBox)MembershipDetailsView.FindControl("UserNameTextBox");
            TextBox EmailTextBox = (TextBox)MembershipDetailsView.FindControl("EmailTextBox");

            String userId = null;
            
            String connectionString = ConfigurationManager.ConnectionStrings["ankietyzacjaConnectionString"].ConnectionString;

            SqlConnection connection = new SqlConnection(connectionString);

            connection.Open();

            UzytkownikDao uzytkownikDao = new UzytkownikDao(connection, null); 

            try
            {
                AnkietyzacjaMembershipUser user = uzytkownikDao.utworzMembership(UserNameTextBox.Text, EmailTextBox.Text);

                userId = user.user.ProviderUserKey.ToString();

                AnkietyzacjaSmtpClient ankietyzacjaSmtpClient = new AnkietyzacjaSmtpClient();
                ankietyzacjaSmtpClient.newUserEmail(user.user.UserName, user.password, user.user.Email);


            }
            catch (MembershipCreateUserException ex)
            {
                String error = GetErrorMessage(ex.StatusCode);
                addError(error);
                e.Cancel = true;
            }

            UzytkownikSqlDataSource.InsertParameters["UZYTKOWNIK_ID"].DefaultValue = userId;

            connection.Close();

        }

        public string GetErrorMessage(MembershipCreateStatus status)
        {
            switch (status)
            {
                case MembershipCreateStatus.DuplicateUserName:
                    return "Użytkownik o podanej nazwie już istnieje. Proszę wybrać inną nazwę użytkownika";

                case MembershipCreateStatus.DuplicateEmail:
                    return "Użytkownik z podanym adresem e-mail już istnieje.";

                case MembershipCreateStatus.InvalidPassword:
                    return "Wpisane hasło jest nieprawidłowe.";

                case MembershipCreateStatus.InvalidEmail:
                    return "Błędny adres e-mail.";

                case MembershipCreateStatus.UserRejected:
                    return "Błąd tworzenia użytkownika.";

                default:
                    return "Wystąpił nieznany bład. Jeśli się powtórzy, proszę skontaktować się z administratorem.";
            }
        }

        protected void UzytkownikDetailsView_ItemInserted(object sender, DetailsViewInsertedEventArgs e)
        {
            Server.Transfer("PersonalDataChange.aspx?uzytkownik_id=" + UzytkownikSqlDataSource.InsertParameters["UZYTKOWNIK_ID"].DefaultValue);
        }
        private void addError(String er)
        {
            CustomValidator val = new CustomValidator();
            val.IsValid = false;
            val.ErrorMessage = er;
            val.ValidationGroup = "PersonalDataValidationGroup";
            this.Page.Validators.Add(val);
        }

        protected void AddUserButton_Click(object sender, EventArgs e)
        {
            Server.Transfer("PersonalDataChange.aspx?new=1");
        }
    }


}